package com.knowledge.plus.java8.函数式接口;

import java.util.*;
import java.util.function.Supplier;

/**
 * Supplier<T> 供给型接口：没有参数，只有返回值
 * 这个接口通常用于延迟计算或作为需要生成新值的地方的工厂
 *
 * @author TPF
 * @since 2023/12/5
 */
class SupplierDemo {

    public static void main(String[] args) {
        /*
         * 示例1：
         */
        Supplier<Integer> randomIntSupplier = () -> new Random().nextInt(100);
        int randomInteger1 = randomIntSupplier.get();   // 使用Supplier生成一个随机整数
        int randomInteger2 = randomIntSupplier.get();

        /*
         * 示例2：
         */
        Integer[] arr1 = {22, 33, 55, 66};
        Integer[] arr2 = {44, 99, 10};
        Integer[] calculate = calculate(() -> arr1, () -> arr2);
    }

    private static Integer[] calculate(Supplier<Integer[]> supplier1, Supplier<Integer[]> supplier2) {
        Integer[] arr1 = supplier1.get();   // get() 是一个无参的有返回值的抽象方法
        Integer[] arr2 = supplier2.get();
        List<Integer> list = new ArrayList<>();
        Collections.addAll(list, arr1);
        Collections.addAll(list, arr2);
        Collections.sort(list);
        Integer[] combined = list.toArray(new Integer[0]);  // 将列表转换回数组
        System.out.println(Arrays.toString(combined));  // [10, 22, 33, 44, 55, 66, 99]
        return combined;
    }

}
